package main
// copy
import "fmt"

func main()  {
	a1 := []int{1,2,3}
	a2 := a1 // 赋值，引用 切片
	//var a3 int //nil
	var a3 = make([]int, 3,3) // a3是新的内存
	copy(a3 , a1) // 拷贝值
	fmt.Println(a1,a2,a3) //[1 2 3] [1 2 3] [1 2 3]
	a1[0]= 99 // 修改底层数组
	fmt.Println(a1,a2,a3) //[99 2 3] [99 2 3] [1 2 3]

	// 删除a1中的2
	// 修改了底层数组
	a1 = append(a1[:1],a1[2:]...) //容量是3 因为切片不存值，是底层数组存值
	fmt.Println(a1,a2,a3) 
	// [99 3] [99 3 3] [1 2 3]
	// a2为什么是[99,3,3]，因为a1是a2的底层数组，a1删除了2，导致a2的切片也删除2长度没变
	//相当于把后面的3往前移动了一位，原数组的第三个位置值还是3
}